package com.r2coding.storage.engine.core;

import com.r2coding.storage.engine.core.context.*;

import java.io.IOException;

/**
 * @author 98k灬
 * @version v1.0.0
 * @Description : 文件存储引擎的顶级接口
 * @Create on : 2023/10/13 12:17
 **/
public interface StorageEngine {
    /**
     * 存储物理文件
     *
     * @param storeFileContext 存储信息
     * @throws IOException IO异常
     */
    void store(StoreFileContext storeFileContext) throws IOException;

    /**
     * 删除物理文件
     *
     * @param deleteFileContext 删除信息
     * @throws IOException IO异常
     */
    void delete(DeleteFileContext deleteFileContext) throws IOException;

    /**
     * 存储物理文件的分片
     *
     * @param context 上下文
     */
    void storeChunk(StoreFileChunkContext context) throws IOException;

    /**
     * 文件合并
     *
     * @param context 上下文
     * @throws IOException IO异常
     */
    void mergeFile(MergeFileContext context) throws IOException;

    /**
     * 读取文件内容 写入到输出流中
     *
     * @param context 上下文
     * @throws IOException IO异常
     */
    void readFile(ReadFileContext context) throws IOException;
}
